#ifndef _XX_YY_BMOCK_FUNC_INFO
#define _XX_YY_BMOCK_FUNC_INFO

#include <string>
#include <vector>

namespace bmock
{
	struct mock_dec_exception : public std::exception {

	};

	struct func_info
	{
		func_info(std::string funcSig, std::string funcName);
		bool operator== (const func_info&) const;
		std::string get_func_name() const { return funcName_; }
		std::string get_return_type() const { return returnType_; }
		std::string get_func_sig() const;
		std::vector<std::string> get_args_types() const { return argTypes_; }

	protected:
		friend struct test_mode_control;

		void parse(std::string& funcSig, const std::string& funcName);		
		size_t parseFuncName(std::string& funcSig, const std::string& funcName);
		void parseArgsAndPostfix(std::string& funcSig, size_t index);
		void parseReturnType(std::string& funcSig);
		size_t parseBrackets(const std::string& str, size_t begIndex, const char begBracket, const char endBracket, int direction=1) const;		
		void removeExtraSpaces(std::string& str);
		
		std::string funcName_;
		std::string returnType_;
		std::vector<std::string> argTypes_;	
		std::string postFix_;
	};	
}

#endif